#include "Servidor.h"


Servidor::Servidor(BattleMasterInterface* game){
	clientes =  new ColaClientes();
	mensajesServer = new ColaMensajes(SERVER_OWN);
	conexiones = new Welcomer(clientes,&conectado,game,mensajesServer);
	this->game = game;
}

void Servidor::iniciar(unsigned int puerto,unsigned int maxConexiones){
	conectado = true;
	escucharConexiones(puerto,maxConexiones);
}

void Servidor::escucharConexiones(unsigned int puerto,unsigned int maxConexiones){
	conexiones->iniciar(puerto,maxConexiones);
	conexiones->start();
}

void Servidor::terminar(){

	//Levanto la bandera de apagado
	conectado = false;
	//Le mando un signal para que salga del bloqueo
	mensajesServer->signal();

	//Mato los hilos que lanze en el proceso
	conexiones->terminar();
	conexiones->join();

}

bool Servidor::isRunning(){
	return conectado;
}

void* Servidor::run(){
	while(conectado){
		//Obtengo el mensaje de la cola
		DTO* dto = mensajesServer->getMensaje();

		//Lo propago
		this->propagarDTO(dto);
	}

	return NULL;
}

//Para cada uno de los clientes le inserto el dto
void Servidor::propagarDTO(DTO* dto){
	clientes->propagarDTO(dto);
}


Servidor::~Servidor() {
	terminar();

	delete conexiones;

	delete clientes;

	delete mensajesServer;
}
